package tech.aistar.corejava.day03;

/**
 * @Author:         lya
 * @Description:   本类的作用描述:当点击run运行的时候
 *      1.JVM加载MethodTest01类进内存
 *      2.由于main是使用static修饰的,使用static修饰的就是属于类
 *      3.static修饰的就会 立即在内存中分配空间以及初始化好
 *      4.JVM就会去寻找方法名称为main的方法,进入执行里面的业务逻辑
 *      5.当执行到main里面的MethodTest01 t = new MethodTest01();
 *      6.就会在内存中为所有的非静态成员[包括非静态方法]分配空间以及初始化
 *      7.通过对象去调用非静态方法[非静态的方法是对象拥有的
 *
 * @param
 * @return:
 * @CreateDate:    2019/7/22 20:41
 * @Version:       1.0
*/
public class MethodTest01 {
    //main方法是程序的唯一入口
    public static void main(String[] args) {
        //方法体中不能再定义方法
        //但是可以调用方法!!!

        //调用非静态方法的时候,是需要通过对象来调用的
        //why? 非静态的成员是对象拥有的?

        //创建对象
        //类名 对象名 = new 类名();
        //当程序执行到此就会在内存中为所有的非静态成员[包括非静态方法]
        // 分配空间以及初始化

        //调用谁的方法去创建谁的对象!
        MethodTest01 t = new MethodTest01();//t是对象
        //通过对象.方法();直接调用
        t.test01();

        //调用静态方法
        //类名.方法名();
        MethodTest01.test02();
    }

    /**
     * 文档注释
     * 自定义的方法.不是程序的入口方法
     * 需要在main方法中去调用.
     */
    private void test01() {
        System.out.println("test01.......");
    }
    /**
     * 公共的静态的无返回类型,无参的方法
     * static修饰的属于静态成员 - 类拥有的
     * 谁拥有就是谁去调用.
     */
    private static void test02() {
        System.out.println("test02..........");
    }

    /**
     * 静态方法
     */
    public static void test03(){
        //直接调用非静态方法
        //创建对象
        MethodTest01 t = new MethodTest01();
        t.test01();

        //直接调用静态方法
        test02();
    }
    /**
     * 非静态方法
     */
    public void test04(){
        //直接调用非静态方法
        test01();
        //this关键字 -  代表是当前对象调用test04方法的对象,可以省略不写

        //所谓的直接调用的意思就是对象或者类直接省略不写

        //this.test04();
        //直接调用静态方法
        test02();
    }
}
